package com.zenithmind.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.chat.pojo.entity.ChatFriendSetting;
import com.zenithmind.chat.pojo.dto.ChatFriendSettingDTO;
import com.zenithmind.chat.pojo.vo.ChatFriendSettingVO;

import java.util.List;

/**
 * 好友设置服务接口 - 遵循单一职责原则
 * 只负责好友设置的业务逻辑处理
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ChatFriendSettingService extends IService<ChatFriendSetting> {

    /**
     * 获取好友设置
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @return 好友设置
     */
    ChatFriendSettingVO getFriendSetting(String userId, String friendId);

    /**
     * 更新好友设置
     * 
     * @param dto 设置信息
     * @param userId 用户ID
     * @return 更新结果
     */
    Boolean updateFriendSetting(ChatFriendSettingDTO dto, String userId);

    /**
     * 创建默认好友设置
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @return 设置ID
     */
    String createDefaultSetting(String userId, String friendId);

    /**
     * 删除好友设置
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @return 删除结果
     */
    Boolean deleteFriendSetting(String userId, String friendId);

    /**
     * 批量创建默认设置
     * 
     * @param userId 用户ID
     * @param friendIds 好友ID列表
     * @return 创建结果
     */
    Boolean batchCreateDefaultSettings(String userId, List<String> friendIds);

    /**
     * 批量删除好友设置
     * 
     * @param userId 用户ID
     * @param friendIds 好友ID列表
     * @return 删除结果
     */
    Boolean batchDeleteFriendSettings(String userId, List<String> friendIds);

    /**
     * 更新好友备注
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @param remark 备注
     * @return 更新结果
     */
    Boolean updateFriendRemark(String userId, String friendId, String remark);

    /**
     * 更新好友分组
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @param groupName 分组名称
     * @return 更新结果
     */
    Boolean updateFriendGroup(String userId, String friendId, String groupName);

    /**
     * 更新免打扰设置
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @param isMuted 是否免打扰
     * @return 更新结果
     */
    Boolean updateMuteSetting(String userId, String friendId, Boolean isMuted);

    /**
     * 更新置顶设置
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @param isTop 是否置顶
     * @return 更新结果
     */
    Boolean updateTopSetting(String userId, String friendId, Boolean isTop);

    /**
     * 更新黑名单设置
     * 
     * @param userId 用户ID
     * @param friendId 好友ID
     * @param isBlocked 是否拉黑
     * @return 更新结果
     */
    Boolean updateBlockSetting(String userId, String friendId, Boolean isBlocked);

    /**
     * 查询用户的所有好友设置
     * 
     * @param userId 用户ID
     * @return 设置列表
     */
    List<ChatFriendSettingVO> getUserFriendSettings(String userId);

    /**
     * 查询指定分组的好友设置
     * 
     * @param userId 用户ID
     * @param groupName 分组名称
     * @return 设置列表
     */
    List<ChatFriendSettingVO> getFriendSettingsByGroup(String userId, String groupName);

    /**
     * 查询置顶的好友设置
     * 
     * @param userId 用户ID
     * @return 设置列表
     */
    List<ChatFriendSettingVO> getTopFriendSettings(String userId);

    /**
     * 查询免打扰的好友设置
     * 
     * @param userId 用户ID
     * @return 设置列表
     */
    List<ChatFriendSettingVO> getMutedFriendSettings(String userId);

    /**
     * 查询黑名单的好友设置
     * 
     * @param userId 用户ID
     * @return 设置列表
     */
    List<ChatFriendSettingVO> getBlockedFriendSettings(String userId);
}
